perm filename PPITCH.SAI[4,ALS]1 blob
sn#057485 filedate 1973-08-13 generic text, type T, neo UTF8
00010 BEGIN "PITCH"
00020 DEFINE ⊂="COMMENT"; ⊂ AUG.2,1973;
00030 INTEGER I,J,K,L,M,N,P,Q,R,POINTX,POINTY,STATE,DELTA,VAL,CHAN1,EOF;
00040 INTEGER II,JJ,P1,P2,P3,T1,T2,T3,T,DT,H,TAU1,TAU2;
00050 INTEGER ARRAY BUF,PITCH[0:1000];
00060 STRING FILEN,READ,READ1,FILEO,READ2;
00070 DEFINE CR="'15",LF="'12",TB="'11",CRLF="CR&LF";
00080
00090 ⊂ Three peaks are located, then tests are made on the middle
00100 one to determine whether it should be reported or discarded;
00110 ⊂ These peaks are P1, P2, and P3 with corresponding times of T1, T2 and T3;
00120
00130 ⊂ The conditions for discarding are
00140 a) just getting started, P1=0
00150 b) the middle peak is definitely smaller than one at the ends
00160 c) the time interval between P1 and P2 is too small
00170 d) the time interval is too large;
00180
00190 FILEN←"FLTD.001[DAT,NJM]";
00200 OUTSTR("Type file name (CR for "&FILEN&".");
00210 IF (READ←INCHWL)≠"" THEN FILEN←READ ELSE READ←FILEN;
00220 READ1←""; FOR I←0 STEP 1 UNTIL 6 DO BEGIN
00230 READ2←READ[1 TO 1]; READ1←READ1&READ2; READ←READ[2 TO 6];
00240 IF READ2="." THEN DONE; END;
00250 FILEO←READ1&"PCH";
00260 POINTY←POINT(12,PITCH[0],-1);
00270 TAU1←40;
00280 OUTSTR("Set TAU1 (CR for 40) ");IF (READ←INCHWL)≠"" THEN TAU1←CVD(READ);
00290 TAU2←140;
00300 OUTSTR("Set TAU2 (CR for 140) ");IF (READ←INCHWL)≠"" THEN TAU2←CVD(READ);
00310 DELTA←1200;
00320 OUTSTR("Type value for DELTA (CR for 1200) ");
00330 IF (READ←INCHWL)≠"" THEN DELTA←CVD(READ);
00340 CHAN1←1; CLOSE(CHAN1); OPEN(CHAN1,"DSK",'10,10,0,0,0,EOF);
00350 LOOKUP(CHAN1,FILEN,0);
00360 J←K←L←STATE←VAL←R←0;
00370 OUTSTR(CRLF&"Pitch measure on file "&FILEN &CRLF&LF);
00380 OUTSTR(" T P A T P A T P A T P A"&CRLF&LF);
00390 SETFORMAT(4,0); P←P1←P2←P3←T1←T2←T3←H←Q←0;
00400 WHILE EOF=0 DO BEGIN
00410 FOR J←0 STEP 1 UNTIL 1000 DO BUF[J]←0;
00420 ARRYIN(CHAN1,BUF[0],1000);
00430 POINTX←POINT(12,BUF[0],-1);
00440 FOR I←0 STEP 1 UNTIL 2999 DO BEGIN
00450 L←K*1500+I%2;
00460 VAL←ILDB(POINTX); IF VAL>2047 THEN VAL←VAL-4096;
00470
00475 IF H>0 THEN IF VAL≤0 THEN IF L-T3>6 THEN T←L;
00480
00490 IF VAL>0 THEN IF H≤0 THEN BEGIN
00500 WHILE TRUE DO BEGIN
00505
00510
00515 IF P<P3 THEN DONE;
00517
00518 ⊂ IF L-T<6 THEN DONE;
00519
00520 IF P1<DELTA THEN BEGIN
00530 P1←P2; T1←T2; P2←P; T2←T3; DONE END;
00540
00550 IF T2-T1>TAU2 THEN BEGIN
00560 P1←P2; T1←T2; P2←P; T2←T3; DONE END;
00570
00580 IF P2<DELTA THEN BEGIN
00590 P2←P; T2←T3; DONE END;
00600
00630 IF T2-T1<TAU1 THEN BEGIN
00640 IF P2>P1 THEN BEGIN
00650 P1←P2; T1←T2; P2←P; T2←T3; DONE END ELSE BEGIN
00660 P2←P; T2←T3; DONE END; END;
00670
00680 IF P2<P1 THEN IF P2<P THEN IF T3-T1<TAU2 THEN BEGIN
00690 P2←P; T2←T3; DONE END;
00700
00710 OUTSTR(CVS(T1%10)&CVS(T2-T1)&CVS(P1 LSH -9)&" ");
00720 IF (R MOD 4)=3 THEN BEGIN OUTSTR(CRLF); R←0; END ELSE R←R+1;
00730 TAU1←(2*TAU1+2*(T2-T1))%5;
00740 IF TAU1<40 THEN TAU1←40;
00750 TAU2←(4*TAU2+T2-T1) LSH -2;
00760 IF TAU2>140 THEN TAU2←140;
00770 Q←Q+1;
00780 IDPB(T1%100,POINTY); IDPB(T2-T1,POINTY); IDPB((P1 LSH -9),POINTY);
00790 P1←P2; T1←T2; P2←P; T2←T3; DONE END;
00800 P3←P; T3←L; P←0; END;
00810 H←VAL;
00820 IF VAL>0 THEN P←P+VAL ELSE P←P-VAL;
00830
00840 END;
00850 K←K+1;
00860
00870 END;
00880
00890 CLOSE(CHAN1); OPEN(CHAN1,"DSK",'10,0,10,0,0,0);
00900 ENTER(CHAN1,FILEO,0);
00910 ARRYOUT(CHAN1,PITCH[0],Q); RELEASE(CHAN1);
00920 END "PITCH";